この項で説明する例では、様々なレプリケーション・スキームの設定方法を示します。これらの例は、わかりやすくするために簡略化されています。これらの例は、より複雑なレプリケーション・スキームを作成するための出発点として使用できます。
次のスキームについて説明します。
例1.4のスキームは、「クイック・スタート」で説明されている単一のマスターおよびサブスクライバの単方向レプリケーション・スキームに基づいています。ただし、この例では、2つのデータ・ストアが別々のホストSystem1およびsystem2に配置されています。また、RETURN RECEIPTサービスを使用して、マスター・データ・ストアのrepl.tab表に対してコミットしたすべてのトランザクションがサブスクライバで受信されることを確認します(「RETURN RECEIPTレプリケーション」を参照)。
図1.7 単方向レプリケーション(単一表)
CREATE REPLICATION repl.repscheme ELEMENT e TABLE repl.tab MASTER masterds ON "system1" SUBSCRIBER subscriberds ON "system2" RETURN RECEIPT;例1.17に示すスキームでは、内容全体(tab1からtab7まで)をレプリケートするMASTERDSというマスター・データ・ストアを(server2にある)SUBSCRIBERDSというサブスクライバ・データ・ストアに接続します。
図1.8 単方向レプリケーション(データ・ストア全体)
CREATE REPLICATION repl.repscheme ELEMENT e DATASTORE MASTER masterds ON "server1" SUBSCRIBER subscriberds ON "server2";
最大63のサブスクライバ・データ・ストアを含むレプリケーション・スキームを作成できます。
図1.9に、2つのサブスクライバ・データ・ストアにレプリケートされる表(repl.tab)を持つマスター・データ・ストアを示します。
この例では、server2にあるsubscriber1dsおよびserver3にあるsubscriber2dsという2つのサブスクライバ・データ・ストアにrepl.tab表をレプリケートするマスター・データ・ストアmasterdsを設定します。レプリケーション・スキームの名前はrepl.twosubscribersです。レプリケーション要素の名前はeです。
CREATE REPLICATION repl.twosubscribers ELEMENT e TABLE repl.tab MASTER masterds ON "server1" SUBSCRIBER subscriber1ds ON "server2", subscriber2ds ON "server3";
この例では、例1.18の基本的な例を使用し、それにRETURN RECEIPT属性およびSTOREパラメータを追加します。RETURN RECEIPTによって、両方のデータ・ストアに対してRETURN RECEIPTサービスが有効になります。STOREパラメータによって、FAILTHRESHOLD値が10に設定され、サブスクライバで障害が発生したと想定される前にサブスクライバに対するmasterdsに累積可能な最大ログ・ファイル数が指定されます(このFAILTHRESHOLD値は、データ・ストアがディスクベース・ロギング用に設定されていることを想定しています)。
CREATE REPLICATION repl.twosubscribers ELEMENT e TABLE repl.tab MASTER masterds ON "server1" SUBSCRIBER subscriber1ds ON "server2", subscriber2ds ON "server3" RETURN RECEIPT STORE masterds FAILTHRESHOLD 10;
この例では、subscriber2dsに対してのみRETURN RECEIPTを有効にする方法を示します(subsciber1ds定義の末尾のカンマは不要です)。
CREATE REPLICATION repl.twosubscribers ELEMENT e TABLE repl.tab MASTER masterds ON "server1" SUBSCRIBER subscriber1ds ON "server2" SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT STORE masterds FAILTHRESHOLD 10;
この例では、RETURN RECEIPT BY REQUESTをsubscriber1dsに、RETURN RECEIPTをsubscriber2dsに適用する方法を示します。このスキームでは、subscriber1dsにアクセスするアプリケーションでttRepSyncSetプロシージャを使用してトランザクションのRETURNサービスを有効にする必要があります。一方、subscriber2dsでは、すべてのトランザクションにRETURNサービスが無条件に提供されます。
CREATE REPLICATION repl.twosubscribers ELEMENT e TABLE repl.tab MASTER masterds ON "server1" SUBSCRIBER subscriberds1 ON "server2" RETURN RECEIPT BY REQUEST SUBSCRIBER subscriber2ds ON "server3" RETURN RECEIPT STORE masterds FAILTHRESHOLD 10;
例1.22の選択レプリケーション・スキームでは、4つの表にレプリケートするマスター・データ・ストアcentraldsを設定します。tab1およびtab2はサブスクライバbackup1dsにレプリケートされ、tab3およびtab4はbackup2dsにレプリケートされます。マスター・データ・ストアはfinanceサーバーにあります。両方のサブスクライバがサーバーbackupsystemに配置されています。
図1.10 選択レプリケーション
CREATE REPLICATION repl.twobackups ELEMENT a TABLE tab1 MASTER centralds ON "finance" SUBSCRIBER backup1ds ON "backupsystem" ELEMENT b TABLE tab2 MASTER centralds ON "finance" SUBSCRIBER backup1ds ON "backupsystem" ELEMENT d TABLE tab3 MASTER centralds ON "finance" SUBSCRIBER backup2ds ON "backupsystem" ELEMENT d TABLE tab4 MASTER centralds ON "finance" SUBSCRIBER backup2ds ON "backupsystem";
例1.23に、マスター・データ・ストアからプロパゲータへの単方向レプリケーション・スキームを示します。プロパゲータは、2つのサブスクライバに変更を転送します。ELEMENT aでは、repl.tab表がfinanceマシンのcentraldsデータ・ストアで更新され、nethandlerマシンのpropdsプロパゲータ・データ・ストアにレプリケートされます。ELEMENT bでは、propdsで受信したrepl.tab表への変更が、マシンbackupsystem1およびbackupsystem2の2つのサブスクライバbackup1dsおよびbackup2dsにそれぞれレプリケートされます。
例1.24の設定もほぼ同じですが、この場合、レプリケーション・スキームを1つではなく2つ使用しています。
repl.tab表のレプリケーションは、同じスキームでは別々の要素名(aおよびb)で記述する必要がありますが、個別のスキームを使用すると、同じ要素名(a)で記述できます。
図1.11 伝播
CREATE REPLICATION repl.propagator ELEMENT a TABLE repl.tab MASTER centralds ON "finance" SUBSCRIBER propds ON "nethandler" ELEMENT b TABLE repl.tab PROPAGATOR propds ON "nethandler" SUBSCRIBER backup1ds ON "backupsystem1", backup2ds ON "backupsystem2";
CREATE REPLICATION repl.propagator ELEMENT a TABLE repl.tab MASTER centralds ON "finance" SUBSCRIBER propds ON "nethandler"; CREATE REPLICATION repl.propagator2 ELEMENT a TABLE repl.tab PROPAGATOR propds ON "nethandler" SUBSCRIBER backup1ds ON "backupsystem1", backup2ds ON "backupsystem2";
例1.25に、2つのデータ・ストア(westcoastホストのwestdsおよびeastcoastホストのeastds)に対する分割ワークロードの双方向レプリケーション・スキームを示します。顧客は2つの表で表されます。西地区の顧客のデータはwaccounts、東地区の顧客のデータはeaccountsに収められます。westdsデータ・ストアは、waccounts表を更新してeastdsデータ・ストアにレプリケートします。eaccounts表は、eastdsデータ・ストアによって所有され、westdsデータ・ストアにレプリケートされます。RETURN RECEIPT属性は、RETURN RECEIPTサービスを有効にして、いずれのマスター表のトランザクションもそれらのサブスクライバによって受信されることを保証します。
例1.26は、同じ設定ですが、r1およびr2という個別のレプリケーション・スキームを使用しています。
図1.12 分割ワークロード・レプリケーション
CREATE REPLICATION repl.r1 ELEMENT elem_waccounts TABLE repl.waccounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" RETURN RECEIPT ELEMENT elem_eaccounts TABLE repl.eaccounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" RETURN RECEIPT;
CREATE REPLICATION repl.r1 ELEMENT elem_waccounts TABLE repl.waccounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" RETURN RECEIPT; CREATE REPLICATION repl.r2 ELEMENT elem_eaccounts TABLE repl.eaccounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" RETURN RECEIPT;
例1.27に、eastdsまたはwestdsのいずれかのデータ・ストアでaccounts表を更新できる一般ワークロードの双方向レプリケーション・スキームを示します。各データ・ストアは、accounts表に対してマスターおよびサブスクライバの両方になります。
要素をこの手法でレプリケートする場合、アプリケーションでは、各データ・ストアへの書込みを調整して、同じデータに同時に更新が行われないようにする必要があります。更新競合を管理するために、BINARY(8)型のタイムスタンプ列(例1.28のtstamp列など)を表に含め、例8.2のレプリケーション・スキームを使用してタイムスタンプ比較を有効にできます。
更新競合の管理方法の詳細は、「レプリケーション競合の検出および解消」を参照してください。
図1.13 分散ワークロード・レプリケーション
CREATE REPLICATION repl.r1 ELEMENT elem_accounts_1 TABLE repl.accounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_accounts_2 TABLE repl.accounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast";
CREATE TABLE repl.accounts (custname VARCHAR(30) NOT NULL, address VARCHAR(80), curbalance DEC(15,2), tstamp BINARY(8), PRIMARY KEY (custname));
図1.14に、Oracleを実行しているデータベース・サーバーおよびTimesTenを実行している2つのアプリケーション・サーバー(server1およびserver2)を示します。例1.30のTargetCustomersキャッシュ・グループは、server1で稼働しているmasterdsデータ・ストアから、server2で稼動しているsubscriberdsデータ・ストアの例1.31のTargetCustomersキャッシュ・グループに単方向でレプリケートされます。
図1.14 キャッシュ・グループのレプリケート
この例では、読取り専用キャッシュ・グループTargetCustomersを別の読取り専用キャッシュ・グループにレプリケートするスキームを示します。
CREATE REPLICATION repl.reptargetcustomers ELEMENT root TABLE repl.customer MASTER masterds ON "server1" SUBSCRIBER subscriberds ON "server2" ELEMENT childorders TABLE repl.orders MASTER masterds ON "server1" SUBSCRIBER subscriberds ON "server2" ELEMENT childorderdetails TABLE repl.orderdetails MASTER masterds ON "server1" SUBSCRIBER SUBSCRIBERDS ON "SERVER2" ELEMENT childinterests TABLE repl.interests MASTER masterds ON "server1" SUBSCRIBER subscriberds ON "server2";
この例では、AUTOREFRESH STATE ONを指定したキャッシュ・グループのレプリケーションを示します。
CREATE READONLY CACHE GROUP TargetCustomers AUTOREFRESH INTERVAL 240 MINUTES FROM customer(custid INT NOT NULL, name CHAR(100) NOT NULL, addr CHAR(100), zip INT, region CHAR(10), PRIMARY KEY (custid)), orders(orderid INT NOT NULL, custid INT NOT NULL, PRIMARY KEY (orderid), FOREIGN KEY (custid) REFERENCES customer(custid)), orderdetails(orderid INT NOT NULL, itemid INT NOT NULL, quantity INT NOT NULL, PRIMARY KEY (orderid, itemid), FOREIGN KEY (orderid) REFERENCES orders(orderid)), INTERESTS(custid INT NOT NULL, interest SMALLINT NOT NULL, PRIMARY KEY (custid, interest), FOREIGN KEY (custid) REFERENCES customer(custid));
この例では、AUTOREFRESH STATE OFFを指定したキャッシュ・グループのレプリケーションを示します。
CREATE READONLY CACHE GROUP TargetCustomers AUTOREFRESH STATE OFF FROM customer(custid INT NOT NULL, name CHAR(100) NOT NULL, addr CHAR(100), zip INT, region CHAR(10), PRIMARY KEY (custid)), orders(orderid INT NOT NULL, custid INT NOT NULL, PRIMARY KEY (orderid), FOREIGN KEY (custid) REFERENCES customer(custid)), orderdetails(orderid INT NOT NULL, itemid INT NOT NULL, quantity INT NOT NULL, PRIMARY KEY (orderid, itemid), FOREIGN KEY (orderid) REFERENCES orders(orderid)), interests(custid INT NOT NULL, interest SMALLINT NOT NULL, PRIMARY KEY (custid, interest), FOREIGN KEY (custid) REFERENCES customer(custid));
図1.15に、アクティブ・スタンバイ・ペアを示します。
図1.15 アクティブ・スタンバイ構成
アクティブ・スタンバイ・ペアでは、2つのデータ・ストアがマスターとして定義されます。1つは、アクティブ・マスター・データ・ストアで、もう1つはスタンバイ・マスター・データ・ストアです。アクティブ・マスター・データ・ストアは直接更新されます。スタンバイ・マスター・データ・ストアは、アクティブ・マスター・データ・ストアから更新を受信し、変更を最大で62の読取り専用サブスクライバ・データ・ストアに伝播します。
例1.32では、rep1とrep2がマスター・データ・ストアとして指定され、rep3とrep4がサブスクライバ・データ・ストアとして指定されています。レプリケーション・モードは、RETURN RECEIPTです。